#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL;
namespace Cephei.QL.Experimental.Credit
{
    /// <summary> 
	/// ! The copula model \f[ Y_i = a_i\,M+\sqrt{1-a_i^2}\:Z_i \f] is specified here by setting the probability density functions for \f$ Z_i \f$ (\f$ D_Z \f$) to a Gaussian and for \f$ M \f$ (\f$ D_M \f$) to a Student t-distribution with \f$ N_m \f$ degrees of freedom.  The variance of the Student t-distribution with \f$ \nu \f$ degrees of freedom is \f$ \nu / (\nu - 2) \f$. Since the copula approach requires zero mean and unit variance distributions, \f$ M \f$ is scaled by \f$ \sqrt{(N_m - 2) / N_m}. \f$  \todo Improve performance/accuracy of the calculation of inverse cumulative Y. Tabulate and store it for selected correlations?
	/// </summary>
    [Guid ("DA84A99F-1EA0-49ad-AA1C-ED20457BC37F"),ComVisible(true)]
	public interface IOneFactorStudentGaussianCopula : Cephei.QL.Experimental.Credit.IOneFactorCopula
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double CumulativeZ(Double z);
        /// <summary> 
		/// 
		/// </summary>
		 Double Density(Double m);
    }   

    /// <summary> 
	/// ! The copula model \f[ Y_i = a_i\,M+\sqrt{1-a_i^2}\:Z_i \f] is specified here by setting the probability density functions for \f$ Z_i \f$ (\f$ D_Z \f$) to a Gaussian and for \f$ M \f$ (\f$ D_M \f$) to a Student t-distribution with \f$ N_m \f$ degrees of freedom.  The variance of the Student t-distribution with \f$ \nu \f$ degrees of freedom is \f$ \nu / (\nu - 2) \f$. Since the copula approach requires zero mean and unit variance distributions, \f$ M \f$ is scaled by \f$ \sqrt{(N_m - 2) / N_m}. \f$  \todo Improve performance/accuracy of the calculation of inverse cumulative Y. Tabulate and store it for selected correlations? Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IOneFactorStudentGaussianCopula_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// -------------------------------------------------------------------------
		/// </summary>
	    IOneFactorStudentGaussianCopula Create (Cephei.QL.IQuote correlation, Int32 nm, Microsoft.FSharp.Core.FSharpOption<Double> maximum, Microsoft.FSharp.Core.FSharpOption<UInt64> integrationSteps);
    }
}

